package com.station.Activitys.utils;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.support.v4.app.NotificationCompat;

import com.maning.updatelibrary.InstallUtils;
import com.station.Activitys.R;

import static android.content.Context.NOTIFICATION_SERVICE;

/**
 * 项目名称：基站运维平台 手机app
 * 类描述：下载 管理工具类
 * 创建人：张飞祥
 * 创建时间：2018/2/2 11:23
 * 修改人：张飞祥
 * 修改时间：2018/2/2 11:23
 * 修改备注：
 */
public class UpdateAPKUtils {

    //TODO 任务栏 下载任务变量初始化
    private static NotificationManager sManager;
    private static NotificationCompat.Builder sBuilder;

    /**
     * 下载最新版本 APK
     */
    public static void initDownLoadAPK(final Context context, String appFileSrc, String versionName){

        ToastUtils.showShort(context,"开始下载...");

        /**
         * 状态栏参数设置
         */
        //实例化 状态栏管理者
        sManager  = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        //TODO 兼容 8.0 写法
        final String NotificationId = "2";
        final int managerId = 2;
        String name = "channel_name";

        /**
         * 版本判断
         */
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(NotificationId, name, NotificationManager.IMPORTANCE_HIGH);
            sManager.createNotificationChannel(channel);
            sBuilder = new NotificationCompat.Builder(context, NotificationId);
        }else {
            sBuilder = new NotificationCompat.Builder(context);
        }

        //TODO 配置参数
        sBuilder .setSmallIcon(R.mipmap.ic_app_notification_blue)              //设置图标
                .setContentTitle("基站管理平台（新版本：v "+versionName+"）.apk")//设置标题
                .setContentText("准备下载")                               //消息内容
                .setAutoCancel(false)                                    //点击后消失
                .setDefaults(NotificationCompat.DEFAULT_LIGHTS);       //使用所有默认值，比如声音，震动，闪屏等等

        //下载APK
        InstallUtils.with(context)
                //必须-下载地址
                .setApkUrl(appFileSrc)
                //非必须，默认update
                .setApkName("update")
                //非必须-下载回调
                .setCallBack(new InstallUtils.DownloadCallBack() {
                    @Override
                    public void onStart() {
                        //下载开始
                        LogUtils.i("downLoadAPK:------------>开始下载");
                        //TODO 设置开始下载任务栏 内容文字
                        sBuilder.setContentText("已下载：0%");
                    }

                    @Override
                    public void onComplete(String path) {

                        //下载完成
                        LogUtils.i("downLoadAPK:------------>下载完成！");
                        //TODO 设置下载完成任务栏 参数配置
                        sBuilder.setContentText("下载完成！")//下载完成
                                .setProgress(0,0,false);    //移除进度条
                        sManager.notify(managerId, sBuilder.build());

                        /**
                         * 安装APK工具类
                         * @param context       上下文
                         * @param filePath      文件路径
                         * @param callBack      安装界面成功调起的回调
                         */
                        InstallUtils.installAPK(context, path, new InstallUtils.InstallCallBack() {
                            @Override
                            public void onSuccess() {
                                //清除 任务栏 下载任务
                                sManager.cancel(managerId);
                                //TODO Log日志
                                LogUtils.i("downLoadAPK:------------>安装完成！");
                            }

                            @Override
                            public void onFail(Exception e) {
                                ToastUtils.showShort(context,"安装失败！");
                                //TODO Log日志
                                LogUtils.i("downLoadAPK:------------>安装失败！");
                            }
                        });
                    }

                    @Override
                    public void onLoading(long total, long current) {
                        //下载中
                        //TODO 配置 正在下载任务栏 参数信息
                        sBuilder.setProgress(100, (int) (current * 100 / total), false);
                        sBuilder.setContentText("已下载："+(current * 100 / total)+"%");
                        sManager.notify(managerId, sBuilder.build());
                        LogUtils.i("downLoadAPK:------------>已下载 "+(current * 100 / total)+" %");
                    }

                    @Override
                    public void onFail(Exception e) {
                        //下载失败
                        ToastUtils.showShort(context,"本次下载失败，请重试！");
                    }

                    @Override
                    public void cancel() {
                        //下载取消
                    }
                })
                //开始下载
                .startDownload();

    }
}
